package com.chuangke.metadata.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chuangke.common.idgen.IdManager;
import com.chuangke.metadata.dao.SysSchemaColumnDao;
import com.chuangke.metadata.dao.SysSchemaTableDao;
import com.chuangke.metadata.entity.SysSchemaColumn;
import com.chuangke.metadata.entity.SysSchemaTable;
import com.chuangke.metadata.service.SysSchemaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SysSchemaServiceImpl implements SysSchemaService {

    @Autowired
    private SysSchemaTableDao sysSchemaTableDao;
    @Autowired
    private SysSchemaColumnDao sysSchemaColumnDao;

    @Override
    public void save(SysSchemaTable table) {
        table.setId(table.getName());
        if(table.getColumns()!=null&&!table.getColumns().isEmpty()){
            table.getColumns().forEach(column -> {
                column.setTableId(table.getId()) ;
                column.setId(column.getTableId()+"-"+column.getName());
            });
            sysSchemaColumnDao.remove(new QueryWrapper<SysSchemaColumn>().lambda().eq(SysSchemaColumn::getTableId,table.getId()));
            sysSchemaColumnDao.saveOrUpdateBatch(table.getColumns()) ;
        }
        sysSchemaTableDao.saveOrUpdate(table) ;

    }

    @Override
    public void delete(String tableId) {
        sysSchemaTableDao.removeById(tableId) ;
        sysSchemaColumnDao.remove(new QueryWrapper<SysSchemaColumn>().lambda().eq(SysSchemaColumn::getTableId,tableId)) ;
    }

    @Override
    public List<SysSchemaTable> findTables(String moudleId) {
        return sysSchemaTableDao.list(new QueryWrapper<SysSchemaTable>().lambda().eq(SysSchemaTable::getMoudleId,moudleId));
    }

    @Override
    public SysSchemaTable loadTable(String tableId) {
        SysSchemaTable table = sysSchemaTableDao.getById(tableId) ;
        List<SysSchemaColumn> columns = sysSchemaColumnDao.list(new QueryWrapper<SysSchemaColumn>().lambda().eq(SysSchemaColumn::getTableId,table.getId())) ;
        table.setColumns(columns);
        return table;
    }

    @Override
    public void deleteDetail(List<String> columnIds) {
        sysSchemaColumnDao.removeBatchByIds(columnIds);
    }

    @Override
    public void saveDetail(SysSchemaColumn sysSchemaColumn) {
        if(StringUtils.isEmpty(sysSchemaColumn.getId())){
            sysSchemaColumn.setId(IdManager.nextId());
        }
        sysSchemaColumnDao.saveOrUpdate(sysSchemaColumn);
    }
}
